
/**
 * @method getLocationSuccess  /此方法只获取一次，失败不做处理 只在当前页面使用
 * @param callback 回调数据
 * @param unOpenShowModal 获取失败时是否显示模态框提示
 * @param hideLoadingD 是否隐藏加载状态
 * @param that 节点this
 */
export function getLocationSuccess(callback,unOpenShowModal,hideLoadingD,that=this) {
  uni.getLocation({
    type: 'gcj02',
    success: res => {
		getApp().globalData.location.lat=res.latitude
		getApp().globalData.location.lng=res.longitude// 更新用户位置
		callback(res)
    },
    fail:function(err){
      // uni.showToast({ title: '授权失败', icon: 'none', duration: 1000 })
      getSetting(res => {
        if (res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true) {//非初始化进入该页面,且未授权
          uni.showModal({
            title: '是否授权当前位置',
            content: '需要获取您的地理位置，请确认授权，拒绝授权无法获取您所需数据',
            success:res=>{
              if (res.cancel) {
                if(hideLoadingD){
                  that.hideLoading()
                }
                callback({ code: 403, msg: '当前用户拒绝授权' })
                uni.showToast({ title: '授权失败', icon: 'none', duration: 2000 })
              } else if (res.confirm) {
                uni.openSetting({
                  success:dataAu=>{
                    // console.log(dataAu)
                    if (dataAu.authSetting["scope.userLocation"] == true) {
                      uni.showToast({ title: '授权成功', duration: 1000 })
                      //再次授权，调用getLocationt的API
                      getLocationSuccess(callback,unOpenShowModal,hideLoadingD,that);
                    } else {
                      if(hideLoadingD){
                        that.hideLoading()
                      }
                      uni.showToast({ title: '授权失败', icon: 'none', duration: 1000 })
                      callback({ code: 403, msg: '当前用户拒绝授权' })
                    }
                  }
                })
              }
            }
          })
        }else { //授权后默认加载
          if (unOpenShowModal) {
            uni.showModal({
              title: '获取当前位置信息失败',
              content: '请检查系统设置中是否打开定位服务或者是否禁用了微信定位权限',
              confirmText: '确定',
              success:res=>{
                callback({ code: 404, msg: '请检查系统设置中是否打开定位服务或者是否禁用了微信定位权限' })
              }
            })
          } else {
            callback({ code: 404, msg: '请检查系统设置中是否打开定位服务或者是否禁用了微信定位权限' })
          }
        }
      })
      
    }
  })
}

/**
 * @method getLocation  页面跳转
 * @param callback 回调数据
 * @param unOpenShowModal 获取失败时是否显示模态框提示
 * @param hideLoadingD 是否隐藏加载状态
 */

export function getLocation(callback, unOpenShowModal = false, hideLoadingD = false,that) { //页面上用此方法
// let that = this
  getSetting(res => {
    if(hideLoadingD){
      that.hideLoading()
    }
    if (res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true) {//非初始化进入该页面,且未授权
      uni.showModal({
        title: '是否授权当前位置',
        content: '需要获取您的地理位置，请确认授权，拒绝授权无法获取您所需数据',
        success: function (res) {
          if (res.cancel) {
            callback({ code: 403, msg: '当前用户拒绝授权' })
            uni.showToast({ title: '授权失败', icon: 'none', duration: 2000 })
          } else if (res.confirm) {
            uni.openSetting({
              success: function (resp) {
                if (resp.authSetting["scope.userLocation"] == true) {
                  uni.showToast({ title: '授权成功', duration: 1000 })
                  //再次授权，调用getLocationt的API
                  getLocationSuccess(callback, unOpenShowModal,hideLoadingD,that);
                } else {
                  uni.showToast({ title: '授权失败', icon: 'none', duration: 1000 })
                  callback({ code: 403, msg: '当前用户拒绝授权' })
                }
              }
            })
          }
        }
      })
    }else { //授权后默认加载
      getLocationSuccess(callback, unOpenShowModal,hideLoadingD,that);
    }
  })
}
export function getSetting(callback){
  uni.getSetting({
    success: (res) => {
		// console.log(res)
      callback(res)
    }
  })
}

/**
 * @method getDistance  计算距离
 * @param lat1 第一点的纬度
 * @param lng1 第一点的经度
 * @param lat2 第二点的纬度
 * @param lng2 第二点的经度
 * @param exactValue 精确值
 */
export function getDistance(lat1, lng1, lat2, lng2,exactValue = 3) {
	var radLat1 = rad(lat1);
	var radLat2 = rad(lat2);
	var a = radLat1 - radLat2;
	var b = rad(lng1) - rad(lng2);
	var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
	s = s * 6378.137; // EARTH_RADIUS;
	s = Math.round(s * 10000) / 10000;
	//输出为公里
	s = s.toFixed(exactValue);
	return s;
}

//经纬度转换成三角函数中度分表形式。 getDistance用到
function rad(d) {
return d * Math.PI / 180.0;
}